/// 判断 x 是否为素数
fn is_prime(x: u32) -> bool {
    // 对小质数和常见合数的快速检查路径
    if x <= 5 {
        return x > 1 && x != 4;
    }
    if x % 2 == 0 || x % 3 == 0 || x % 5 == 0 {
        return false;
    }

    // 平凡的 O(sqrt(n)) 检查
    for i in 2.. {
        if i * i > x {
            break;
        }
        if x % i == 0 {
            return false;
        }
    }
    true
}

/// 找到大于等于 start 的不能写成一个素数和一个平方的两倍之和的奇合数
fn find_next(start: u32) -> u32 {
    for i in (start..).step_by(2) {
        if is_prime(i) {
            continue;
        }
        let mut found = false;
        for j in 1.. {
            let x = match i.checked_sub(2 * j * j) {
                Some(x) => x,
                None => break,
            };
            if is_prime(x) {
                found = true;
                break;
            }
        }
        if !found {
            return i;
        }
    }
    unreachable!()
}

pub fn goldbach_conjecture() -> u64 {
    let a = find_next(33);
    let b = find_next(a + 2);
    (a + b) as u64
}
